package utils;


import cn.hutool.core.util.StrUtil;

import java.util.Arrays;
import java.util.stream.Collectors;

public class StringSQLUtils {
  private static final String BACK_QUOTE = "`";
  private static final String SINGLE_QUOTE = "'";
  private static final String DOUBLE_QUOTE = "\"";

  /**
   * 清除SQL中的`符号
   *
   * @param SQL SQL
   */
  public static String cleanBackQuote(String SQL) {
    if (StrUtil.isNotBlank(SQL)) {
      SQL = SQL.replaceAll(BACK_QUOTE, "");
    }
    return SQL;
  }

  /**
   * 清除SQL中的'符号
   *
   * @param SQL SQL
   */
  public static String cleanSingleQuote(String SQL) {
    if (StrUtil.isNotBlank(SQL)) {
      SQL = SQL.replaceAll(SINGLE_QUOTE, "");
    }
    return SQL;
  }

  /**
   * 清除SQL中的"符号
   *
   * @param SQL SQL
   */
  public static String cleanDoubleQuote(String SQL) {
    if (StrUtil.isNotBlank(SQL)) {
      SQL = SQL.replaceAll(DOUBLE_QUOTE, "");
    }
    return SQL;
  }

  /**
   * 清除SQL中的首部和尾部空白
   *
   * @param SQL SQL
   */
  public static String cleanBeginEndBlank(String SQL) {
    if (StrUtil.isNotBlank(SQL)) {
      SQL = SQL.replaceAll("^\\s+|\\s+$", "");
    }
    return SQL;
  }

  /**
   * 清除SQL每行中--开头到结尾的字符串，保留原格式返回
   *
   * @param SQL SQL
   */
  public static String cleanSQLNote(String SQL) {
    String[] lines = SQL.split("\\R");

    String SQLWithoutNoteBlank = Arrays.stream(lines).map(line -> {
      String withoutInlineComment = line.replaceAll("--.*", "").trim();
      String leadingSpaces = line.replaceAll("^\\s*--.*", "").replaceAll("[^\\s].*$", "");
      return leadingSpaces + withoutInlineComment;
    }).filter(line -> !line.trim().isEmpty()).collect(Collectors.joining(System.lineSeparator()));
    SQLWithoutNoteBlank = cleanBeginEndBlank(SQLWithoutNoteBlank);
    return SQLWithoutNoteBlank;
  }
}
